home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / WSNAKE.ZIP / SNAKE / SNAKE.H < prev   
Text File  |  1996-04-29  |  3KB  |  175 lines

  1. typedef unsigned char byte;
  2. typedef unsigned int  word;
  3. typedef unsigned char bool;
  4. typedef struct {
  5.             byte r, g, b;
  6.         } rgb;
  7.  
  8. rgb pal[64];
  9. rgb pal_orig[64];
  10.  
  11. void waitretrace(void)
  12. {
  13.   while((inportb(0x3DA) & 0x08) != 0);
  14.   while((inportb(0x3DA) & 0x08) == 0);
  15. }
  16.  
  17. void waitdisplay(void)
  18. {
  19.   while((inportb(0x03DA) & 0x08) == 0);
  20.   while((inportb(0x03DA) & 0x08) != 0);
  21. }
  22.  
  23. void getpalrgb(byte c, byte &r, byte &g, byte &b)
  24. {
  25.     outportb(0x03c7, c);
  26.     r = inportb(0x03c9);
  27.     g = inportb(0x03c9);
  28.     b = inportb(0x03c9);
  29. }
  30.  
  31. void setpalrgb(byte c, byte r, byte g, byte b)
  32. {
  33.     outportb(0x03c8, c);
  34.     outportb(0x03c9, r);
  35.     outportb(0x03c9, g);
  36.     outportb(0x03c9, b);
  37. }
  38.  
  39. int keyhit(void)
  40. {
  41.     byte qq;
  42.     asm {
  43.         mov bx, 0x0040
  44.         mov es, bx
  45.         mov ax, es:[0x001C]
  46.         sub ax, es:[0x001A]
  47.         mov qq, al
  48.     }
  49.     return qq;
  50. }
  51.  
  52. void flushkbd(void)
  53. {
  54.     l1:;
  55.     asm {
  56.         mov ah, 0x06
  57.         mov dl, 0x0FF
  58.         int 0x21
  59.         jnz l1
  60.     }
  61. }
  62.  
  63. void buzz(word freq)
  64. {
  65.     asm {
  66.         MOV     BX, [freq]
  67.         MOV     AX, 0x34DD
  68.         MOV     DX, 0x0012
  69.         CMP     DX, BX
  70.         JNB     l1
  71.         DIV     BX
  72.         MOV     BX, AX
  73.         IN      AL, 0x61
  74.         TEST    AL, 0x03
  75.         JNE     l2
  76.         OR      AL, 0x03
  77.         OUT     0x61, AL
  78.         MOV     AL, 0x0B6
  79.         OUT     0x43, AL
  80.     }
  81.     l2:;
  82.     asm {
  83.         MOV     AL, BL
  84.         OUT     0x42, AL
  85.         MOV     AL, BH
  86.         OUT     0x42, AL
  87.     }
  88.     l1:;
  89. }
  90.  
  91. void quiet(void)
  92. {
  93.     asm {
  94.         IN  AL, 0x61
  95.         AND AL, 0x0FC
  96.         OUT 0x61, AL
  97.     }
  98. }
  99.  
  100. void setborderc(byte color)
  101. {
  102.     asm {
  103.         MOV AX, 0x1001
  104.         MOV BH, [color]
  105.         INT 0x10
  106.     }
  107. }
  108.  
  109. void show_display(void)
  110. {
  111.     asm {
  112.         MOV AX, 0x1200
  113.         MOV BL, 0x36
  114.         INT 0x10
  115.     }
  116. }
  117.  
  118. void hide_display(void)
  119. {
  120.     asm {
  121.         MOV AX, 0x1201
  122.         MOV BL, 0x36
  123.         INT 0x10
  124.     }
  125. }
  126.  
  127. void fade_to_black(byte start = 0, byte stop = 63, byte steps = 63)
  128. {
  129.     word i, j = 0;
  130.     byte r, g, b, r2, g2, b2;
  131.     do
  132.     {
  133.         j++;
  134.         for(i = start; i <= stop; i++)
  135.         {
  136.             getpalrgb(i, r, g, b);
  137.             r2 = r; g2 = g; b2 = b;
  138.             if(r > 0) r--;
  139.             if(g > 0) g--;
  140.             if(b > 0) b--;
  141.             if(r != r2 || g != g2 || b != b2)
  142.                 setpalrgb(i, r, g, b);
  143.             if(!(i % 32))
  144.                 waitdisplay();
  145.         }
  146.     }
  147.     while(j <= steps);
  148. }
  149.  
  150. void fade_to_color(byte start = 0, byte stop = 63, byte steps = 63)
  151. {
  152.     word i, j = 0;
  153.     byte r, g, b, r2, g2, b2;
  154.     do
  155.     {
  156.         j++;
  157.         for(i = start; i <= stop; i++)
  158.         {
  159.             getpalrgb(i, r, g, b);
  160.             r2 = r; g2 = g; b2 = b;
  161.             if(r < pal_orig[i].r) r++;
  162.             if(g < pal_orig[i].g) g++;
  163.             if(b < pal_orig[i].b) b++;
  164.             if(r > pal_orig[i].r) r--;
  165.             if(g > pal_orig[i].g) g--;
  166.             if(b > pal_orig[i].b) b--;
  167.             if(r != r2 || g != g2 || b != b2)
  168.                 setpalrgb(i, r, g, b);
  169.             if(!(i % 32))
  170.                 waitdisplay();
  171.         }
  172.     }
  173.     while(j <= steps);
  174. }
  175.